<!-- 区域节点 -->

<template>
  <div class="MapRegion-AreaNode">
    <span :class="nodeClass">{{ data.name }}</span>

    <BtnText v-if="canMark" :red="marked" @click="toClick">
      <i v-if="marked" class="el-icon-remove-outline" />
      <i v-else class="el-icon-position" />
    </BtnText>
  </div>
</template>

<script>
// ============================== 导入依赖 ============================== //

import CORE from '@/CORE'
import props from './props'

// ============================== 导出组件 ============================== //

export default {
  /**
   * 名称定义 (实际使用名称)
   */
  name: 'AreaNode',

  /**
   * 混入列表 (配置选项合并)
   */
  mixins: [CORE.mixWeb('map', 'map_'), CORE.mixInfo('map', 'map_')],

  /**
   * 属性注册 (抽取以便查阅)
   */
  props,

  /**
   * 计算属性 (慎用箭头函数)
   */
  computed: {
    /**
     * 能否标记
     */
    canMark() {
      const { data, map_info } = this
      return map_info.id && data.parentId === map_info.areaId
    },

    /**
     * 是否已标记
     */
    marked() {
      const { location } = this.data
      return !!location && location !== 'none'
    },
  },

  /**
   * 本地方法 (轻量重要在前)
   */
  methods: {
    /**
     * 点击事件
     */
    async toClick() {
      const { data, marked } = this

      if (marked) {
        await CORE.CONFIRM.warning(`确定要清除该${CORE.MAP.REGION}范围吗？`, `清除${CORE.MAP.REGION}`)
        this.map_setOne({ ...data, location: 'none' })
        this.map_startEdit()
      } else {
        this.map_openEdit(data)
      }
    },
  },
}
</script>

<style lang="scss">
@import './index.scss';
</style>
